macro 'get histogram top            [T]';
var
  i,width,height,n,mean,mode,min,max:integer;
  x:real;
BEGIN
GetPicSize(width,height);
i:=height/6;
MakeRoi(0,0,width,i);
Measure;
GetResults(n,mean,mode,min,max);
ShowHistogram;
mean:=GetNumber('mean (top)=',mean);
end;

macro 'get histogram bottom      [B]';
var
  i,width,height,n,mean,mode,min,max:integer;
  x:real;
BEGIN
GetPicSize(width,height);
i:=height/6;
MakeRoi(0,height-i,width,i);
Measure;
GetResults(n,mean,mode,min,max);
ShowHistogram;
mean:=GetNumber('mean (bottom)=',mean);
end;

macro 'get histogram left            [A]';
var
  i,width,height,n,mean,mode,min,max:integer;
  x:real;
BEGIN
GetPicSize(width,height);
i:=width/6;
MakeRoi(0,0,i,height);
Measure;
GetResults(n,mean,mode,min,max);
ShowHistogram;
mean:=GetNumber('mean (left)=',mean);
end;

macro 'get histogram right          [Z]';
var
  i,width,height,n,mean,mode,min,max:integer;
  x:real;
BEGIN
GetPicSize(width,height);
i:=width/6;
MakeRoi(width-i-1,0,i,height);
Measure;
GetResults(n,mean,mode,min,max);
ShowHistogram;
mean:=GetNumber('mean (right)=',mean);
end;

macro 'correct top-bottom  sub  [F]';
var
  i,width,height,n,mean1,mean2,mode,min,max,diff:integer;
  pic,back:integer;
  x:real;
BEGIN

GetPicSize(width,height);
i:=height/6;
i:=GetNumber('how wide a strip? 1/6 of image = ',i);
pic:=PicNumber;

MakeRoi(0,0,width,i);
Measure;
GetResults(n,mean1,mode,min,max);
ShowHistogram;
mean1:=GetNumber('mean top=',mean1);

MakeRoi(0,height-i,width,i);
Measure;
GetResults(n,mean2,mode,min,max);
ShowHistogram;
mean2:=GetNumber('mean bottom=',mean2);

diff:=mean2-mean1;
diff:=GetNumber('bottom-top=',diff);
{diff:=diff*height/(height-i);
x:=diff/255;
x:=GetNumber('factor for scale=',x);}

SetNewSize(width,height);
MakeNewWindow('T-B-scale');
back:=PicNumber;
MakeRoi(0,0,0.2*width,height);
DrawScale;
SetScaling('nearest,same window');
ScaleAndRotate(5.,1.,0.0);
x:=abs(diff/255);
MultiplyByConstant(x);
if diff<0 then FlipVertical;

ImageMath('sub',pic,back,1.,0.,'T-B corrected');
ShowHistogram;

end;


macro 'correct left-right    sub    [D]';
var
  i,width,height,n,mean1,mean2,mode,min,max,diff:integer;
  pic,back:integer;
x:real;
BEGIN

GetPicSize(width,height);
i:=width/6;
i:=GetNumber('how wide a strip? 1/6 of image = ',i);
pic:=PicNumber;

MakeRoi(0,0,i,height);
Measure;
GetResults(n,mean1,mode,min,max);
ShowHistogram;
mean1:=GetNumber('mean left=',mean1);

MakeRoi(width-i-1,0,i,height);
Measure;
GetResults(n,mean2,mode,min,max);
ShowHistogram;
mean2:=GetNumber('mean right=',mean2);

diff:=mean2-mean1;
diff:=GetNumber('right-left=',diff);
diff:=diff*width/(width-i);
x:=diff/255;
x:=GetNumber('factor for scale=',x);

SetNewSize(width,height);
MakeNewWindow('L-R-scale');
back:=PicNumber;
MakeRoi(0,0,width,0.2*width);
DrawScale;
x:=5*height/width;
SetScaling('nearest,same window');
ScaleAndRotate(1.,x,0.0);
x:=abs(diff/255);
MultiplyByConstant(x);
if diff<0 then FlipHorizontal;

ImageMath('sub',pic,back,1.,0.,'L-R corrected');
ShowHistogram;

end;



macro '(-' begin end;

macro 'correct top-bottom   div   [1]';
var
  i,width,height,n,mean1,mean2,mode,min,max,diff:integer;
  pic,back:integer;
  x:real;
BEGIN

GetPicSize(width,height);
i:=height/6;
i:=GetNumber('how wide a strip? 1/6 of image = ',i);
pic:=PicNumber;

MakeRoi(0,0,width,i);
Measure;
GetResults(n,mean1,mode,min,max);
ShowHistogram;
{mean1:=GetNumber('mean top=',mean1);}

MakeRoi(0,height-i,width,i);
Measure;
GetResults(n,mean2,mode,min,max);
ShowHistogram;
{mean2:=GetNumber('mean bottom=',mean2);}

diff:=mean2-mean1;
diff:=GetNumber('bottom-top=',diff);
diff:=diff*height/(height-i);
{x:=diff/255;}
{x:=GetNumber('factor for scale=',x);}

SetNewSize(width,height);
MakeNewWindow('T-B-scale');
back:=PicNumber;

MakeRoi(0,0,0.2*height,height);
DrawScale;
x:=5*width/height;
SetScaling('nearest,same window');
ScaleAndRotate(x,1.,0.0);
x:=abs(diff/255);
MultiplyByConstant(x);
if diff<0 then FlipVertical;
if diff<0 then AddConstant(mean2);
if diff>0 then AddConstant(mean1);

ImageMath('div real',pic,back,1.,0.,'T-B corrected');

ShowHistogram;

end;

macro 'correct left-right     div     [2]';
var
  i,width,height,n,mean1,mean2,mode,min,max,diff:integer;
  pic,back:integer;
x:real;
BEGIN

GetPicSize(width,height);
i:=width/6;
i:=GetNumber('how wide a strip? 1/6 of image = ',i);
pic:=PicNumber;

MakeRoi(0,0,i,height);
Measure;
GetResults(n,mean1,mode,min,max);
ShowHistogram;
mean1:=GetNumber('mean left=',mean1);

MakeRoi(width-i-1,0,i,height);
Measure;
GetResults(n,mean2,mode,min,max);
ShowHistogram;
mean2:=GetNumber('mean right=',mean2);

diff:=mean2-mean1;
diff:=GetNumber('right-left=',diff);
diff:=diff*width/(width-i);
{x:=diff/255;}
{x:=GetNumber('factor for scale=',x);}

SetNewSize(width,height);
MakeNewWindow('L-R-scale');
back:=PicNumber;
MakeRoi(0,0,width,0.2*width);
DrawScale;
x:=5*height/width;
SetScaling('nearest,same window');
ScaleAndRotate(1.,x,0.0);
x:=abs(diff/255);
MultiplyByConstant(x);
if diff<0 then FlipHorizontal;
if diff<0 then AddConstant(mean2);
if diff>0 then AddConstant(mean1);

ImageMath('div real',pic,back,1.,0.,'L-R corrected');
Invert;
Invert;
ShowHistogram;

end;

macro '(-' begin end;

macro '1 - select center             [S]';
var
  i,x,y,w,h,width,height,n,mean1,mean2,mode,min,max,diff:integer;
  pic,back:integer;

BEGIN

GetPicSize(width,height);
i:=height/6;
w:=width/3;
h:=height/3;
MakeRoi(w,h,w,h);

end;

macro '2 - correct  light   sub    [C]';
var
  i,x,y,w,h,width,height,n:integer;
  mean,mean1,mean2,mode,min,max:integer;
  pic,back,diff1,diff2:integer;
  f,x1,x2:real;

BEGIN

GetPicSize(width,height);
i:=height/6;

pic:=PicNumber;

GetRoi(x,y,w,h);
Measure;
GetResults(n,mean,mode,min,max);
x:= x+w/2;
y:= y+h/2;


MakeRoi(0,0,width,i);
Measure;
GetResults(n,mean1,mode,min,max);
ShowHistogram;
mean1:=GetNumber('mean top=',mean1);

diff1:=mean-mean1;
diff1:=GetNumber('center-top=',diff1);
x1:=diff1/255;
x1:=GetNumber('factor for scale=',x1);

MakeRoi(0,height-i,width,i);
Measure;
GetResults(n,mean2,mode,min,max);
ShowHistogram;
mean2:=GetNumber('mean bottom=',mean2);

diff2:=mean2-mean;
diff2:=GetNumber('bottom-center=',diff2);
x2:=diff2/255;
x2:=GetNumber('factor for scale=',x2);

SetNewSize(width,height);
MakeNewWindow('center-T-B-scale');
back:=PicNumber;

MakeRoi(0,0,10,y);
DrawScale;
x1:=abs(x1);
MultiplyByConstant(x1);
if diff1<0 then FlipVertical;

MakeRoi(0,y,10,height-y-1);
DrawScale;
x2:=abs(x2);
MultiplyByConstant(x2);
if diff2<0 then FlipVertical;

MakeRoi(0,0,10,height);

 f:=(width-1)/10;
SetScaling('nearest,same window');
ScaleAndRotate(f,1.,0.0);

ImageMath('sub',pic,back,1.,0.,'center-T-B corrected');


GetPicSize(width,height);
i:=width/6;
pic:=PicNumber;

MakeRoi(0,0,i,height);
Measure;
GetResults(n,mean1,mode,min,max);
ShowHistogram;
mean1:=GetNumber('mean left=',mean1);

diff1:=mean-mean1;
diff1:=GetNumber('right-left=',diff1);
x1:=diff1/255;
x1:=GetNumber('factor for scale=',x1);

MakeRoi(width-i-1,0,i,height);
Measure;
GetResults(n,mean2,mode,min,max);
ShowHistogram;
mean2:=GetNumber('mean right=',mean2);

diff2:=mean2-mean;
diff2:=GetNumber('right-left=',diff2);
x2:=diff2/255;
x2:=GetNumber('factor for scale=',x2);

SetNewSize(width,height);
MakeNewWindow('center-L-R-scale');
back:=PicNumber;

MakeRoi(0,0,x,10);
DrawScale;
x1:=abs(x1);
MultiplyByConstant(x1);
if diff1<0 then FlipHorizontal;

MakeRoi(x-1,0,width-x,10);
DrawScale;
x2:=abs(x2);
MultiplyByConstant(x2);
if diff2<0 then FlipHorizontal;

MakeRoi(0,0,width,10);

 f:=(height-1)/10;
SetScaling('nearest,same window');
ScaleAndRotate(1.,f,0.0);

ImageMath('sub',pic,back,1.,0.,'center- corrected');

end;


macro '(-' begin end;

macro 'apply camera LUT               [Y]';
var
  i:integer;
begin

PutMessage('Select camera.LUT');
SetImport('Palette');
Import('');
UpdateLUT;
i:=GetNumber('Want to apply ? return=yes, cancel = no',i);
ApplyLUT;
end;

macro 'add safety grey values        [G]';
var
  n,mean,mode,min,max,i:integer;
begin

Measure;
GetResults(n,mean,mode,min,max);
ShowHistogram;
i:=(255-max)/2;
i:=GetNumber('1/2 of safety margin is ',i);

AddConstant(i);
ShowHistogram;

end;


macro 'subtract background  1-2   [V]';
var
  i,width,height,n,mean1,mean2,mode,min,max,diff:integer;
  x:real;
BEGIN

ImageMath('sub',1,2,1.,0.,'BG corrected');
end;


macro 'equalize         [E]';
var
  i:integer;

BEGIN

EqualizeHist;
UpdateLUT;

end;



macro 'reset LUT       [R]';
BEGIN
SetPalette('Grayscale');
ShowHistogram;
END;
